package com.ruoyi.system.service.impl;

import com.ruoyi.system.domain.BAnjuan_af;
import com.ruoyi.system.domain.BEng_af;
import com.ruoyi.system.domain.BFile_af;
import com.ruoyi.system.domain.BPicture_af;
import com.ruoyi.system.mapper.BAnjuan_afMapper;
import com.ruoyi.system.mapper.BEng_afMapper;
import com.ruoyi.system.mapper.BFile_afMapper;
import com.ruoyi.system.mapper.BPicture_afMapper;
import com.ruoyi.system.service.IBEng_afService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 电子工程表相关功能Service业务层处理
 * 
 * @author Zzr
 * @date 2023-09-20
 */
@Service
public class BEng_afServiceImpl implements IBEng_afService 
{
    @Autowired
    private BEng_afMapper bEEngMapper;

    @Autowired
    private BAnjuan_afMapper beAnjuanMapper;

    @Autowired
    private BFile_afMapper beFileMapper;

    @Autowired
    private BPicture_afMapper bePictureMapper;

    /**
     * 查询电子工程表相关功能
     * 
     * @param id 电子工程表相关功能主键
     * @return 电子工程表相关功能
     */
    @Override
    public BEng_af selectBEEngById(String id)
    {
        return bEEngMapper.selectBEEngById(id);
    }

    /**
     * 查询电子工程表相关功能列表by01
     *
     * @param bEEng 电子工程表相关功能
     * @return 电子工程表相关功能集合
     */
    public List<BEng_af> listZeroOne(BEng_af bEEng)
    {
        return bEEngMapper.listZeroOne(bEEng);
    }

    /**
     * 查询电子工程表相关功能列表by234
     *
     * @param bEEng 电子工程表相关功能
     * @return 电子工程表相关功能集合
     */
    public List<BEng_af> listTwoThreeFour(BEng_af bEEng)
    {
        return bEEngMapper.listTwoThreeFour(bEEng);
    }

    /**
     * 查询电子工程表相关功能列表
     * 
     * @param bEEng 电子工程表相关功能
     * @return 电子工程表相关功能
     */
    @Override
    public List<BEng_af> selectBEEngList(BEng_af bEEng)
    {
        return bEEngMapper.selectBEEngList(bEEng);
    }

    /**
     * 新增电子工程表相关功能
     * 
     * @param bEEng 电子工程表相关功能
     * @return 结果
     */
    @Override
    public int insertBEEng(BEng_af bEEng)
    {
        return bEEngMapper.insertBEEng(bEEng);
    }

    /**
     * 修改电子工程表相关功能
     * 
     * @param bEEng 电子工程表相关功能
     * @return 结果
     */
    @Override
    public int updateBEEng(BEng_af bEEng)
    {
        return bEEngMapper.updateBEEng(bEEng);
    }

    /**
     * 批量删除电子工程表相关功能
     * 
     * @param ids 需要删除的电子工程表相关功能主键
     * @return 结果
     */
    @Override
    public int deleteBEEngByIds(String[] ids)
    {
        return bEEngMapper.deleteBEEngByIds(ids);
    }

    /**
     * 删除电子工程表相关功能信息
     * 
     * @param id 电子工程表相关功能主键
     * @return 结果
     */
    @Override
    public int deleteBEEngById(String id)
    {
        return bEEngMapper.deleteBEEngById(id);
    }

    /**
     * 通过审核
     *
     * @param bEEng 电子工程表相关功能
     * @return 结果
     */
    @Override
    public int passBEEng(BEng_af bEEng)
    {
        BEng_af beEngNew = bEEngMapper.selectBEEngById(bEEng.getId());
        beEngNew.setProjectStatus((long)2);
        return bEEngMapper.updateBEEng(beEngNew);
    }

    /**
     * 审核未通过
     *
     * @param bEEng 电子工程表相关功能
     */
    @Override
    public int failPassBEEng(BEng_af bEEng)
    {
        BEng_af beEngNew = bEEngMapper.selectBEEngById(bEEng.getId());

        //获取案卷列表
        BAnjuan_af beAnjuan = new BAnjuan_af();
        beAnjuan.setEeid(bEEng.getId());
        List<BAnjuan_af> anjuanList = beAnjuanMapper.selectBEAnjuanList(beAnjuan);
        List<String> beAnjuanList = new ArrayList<>();

        //删除所有电子案卷
        for(BAnjuan_af beAnjuan1 : anjuanList){
            beAnjuanList.add(beAnjuan1.getId());
            beAnjuanMapper.deleteBEAnjuanById(beAnjuan1.getId());
        }

        //删除所有电子文件与电子图片
        this.deleteFile(beAnjuanList);

        //删除工程和本地文件
        this.deleteLocal(beEngNew);

        return 1;
    }
    /**
     * 删除文件
     *
     */
    public void deleteFile(List<String> beAnjuanList){
        List<String> beFileList = new ArrayList<>();

        for (String anjuanId : beAnjuanList){
            BFile_af beFile = new BFile_af();
            beFile.setAid(anjuanId);
            List<BFile_af> fileList = beFileMapper.selectBEFileList(beFile);
            for(BFile_af beFile1 : fileList){
                beFileList.add(beFile1.getId());
                beFileMapper.deleteBEFileById(beFile1.getId());
            }
        }
        this.deletepic(beFileList);
    }

    /**
     * 删除图片
     *
     */
    public void deletepic(List<String> beFileList){
        for (String fileId : beFileList){
            BPicture_af bePicture = new BPicture_af();
            bePicture.setEfid(fileId);
            List<BPicture_af> pictureList = bePictureMapper.selectBEPictureList(bePicture);
            for(BPicture_af bePicture1 : pictureList){
                bePictureMapper.selectBEPictureById(bePicture1.getId());
            }
        }
    }


    /**
     * 删除本地文件与电子工程
     *
     */
    public void deleteLocal(BEng_af beEng){
        String path = beEng.getFileDirectory();

        bEEngMapper.deleteBEEngById(beEng.getId());

        File file = new File(path);
        this.delete(file);
    }

    /**
     *
     * 删除文件夹
     *
     */
    public static void delete(File file) {
        if (file.isDirectory()) {
            File[] files = file.listFiles();

            if (files != null) {
                for (File subFile : files) {
                    delete(subFile);
                }
            }
        }
        file.delete();
    }



}
